//package com.base;
//
//
//import org.openjdk.jmh.annotations.*;
//import org.openjdk.jmh.runner.Runner;
//import org.openjdk.jmh.runner.RunnerException;
//import org.openjdk.jmh.runner.options.Options;
//import org.openjdk.jmh.runner.options.OptionsBuilder;
//
//import java.lang.reflect.Method;
//import java.lang.reflect.Proxy;
//import java.util.concurrent.TimeUnit;
//
///**
// * @author: sun.hongliang
// * @create: 2018/06/14 09:49
// */
//@OutputTimeUnit(TimeUnit.NANOSECONDS)
//@BenchmarkMode(Mode.AverageTime)
//public class ReflectPerformanceTest {
//
//    public static void main(String[] args) {
//        Options options = new OptionsBuilder().include(ReflectPerformanceTest.class.getName()).forks(1).build();
//        try {
//            new Runner(options).run();
//        } catch (RunnerException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 正常调用方法执行
//     *
//     * @throws Exception
//     */
//    @Threads(5)
//    @Benchmark
//    public void commonMethod() throws Exception {
//        IstoreDao dao = new RedisDao();
//        dao.add();
//    }
//
//    /**
//     * 反射调用方法执行
//     *
//     * @throws Exception
//     */
//    @Threads(5)
//    @Benchmark
//    public static void reflectMethod() throws Exception {
//        Method method = RedisDao.class.getDeclaredMethod("add");
//        method.setAccessible(true);
//        method.invoke(RedisDao.class.newInstance());
//    }
//
//    /**
//     * 代理的方式调用
//     *
//     * @throws Exception
//     */
//    @Threads(5)
//    @Benchmark
//    public void invocationMethod() throws Exception {
//        IstoreDao dao = new RedisDao();
//        DaoHandler h = new DaoHandler();
//        h.setTarget(dao);
//        IstoreDao o = (IstoreDao) Proxy.newProxyInstance(RedisDao.class.getClassLoader(), new Class[]{IstoreDao.class}, h);
//        o.add();
//    }
//}
